import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * La clase enemigo representa a todos los enemigos en general
 */
public class Enemigo  extends Mover
{
    private int velocidadBala=0; //velocidad de la bala del enemigo
    private int tiempoGiro=0; //tiempo en que el tanque enemigo da giro
    private int velocidad=0; //velocidad  de avance del enemigo
    private int direccion;
    
    public void act() 
    {
        muevete();
        dispara();
        tiempoGiro++;
        velocidadBala++;
        velocidad++;
    }
    
    /**
     * Metodo que hace disparar al enemigo despues de un tiempo determinado
     */    
    public void dispara()
    {
        if(velocidadBala%50 == 0)
        {
            Actor A=new Bala2(getRotation());
            
            int x=getX();
            int y=getY();
            World world=getWorld();
            world.addObject(A,x,y);
            Greenfoot.playSound("dispara2.WAV");
        }
    }
    
    /**
     * Metodo que mueve al enemigo aleatoriamente
     */       
    public void muevete()
    {
        boolean hay=false;
        
        if(HayObjeto())
        {
            hay=true;
        }
     
        if(velocidad%3==0 &&  getX()<543)
            if(hay==false)//si no hay pared puede caminar
                move();

        if(getX()>=543)
        {
            turn(90);
            move();
        }

        //checa tiempo de giro
        if(tiempoGiro%20 == 0)
        {
            if(hay==true)
            {
                cambiaPosicion();
                hay=false;}
                int grados=Greenfoot.getRandomNumber(360); 
                turn(grados);
                if(getRotation()>=360)
                setRotation(0);
            }
            cambiaDireccion(getRotation());
        }

        /**
         * El metodo tocoBala es para checar si al enemigo lo a tocado una bala
         * si lo toco retorna true y si no false
         */
        public boolean tocoBala()
        {
            Actor bala=getOneIntersectingObject(Bala.class);
            
            if(bala != null)
                return true;
            else
                return false;
        }
        
        /**
         * Cuando Hay pared da vuelta y cambia de posicion
         */
        public void cambiaPosicion()
        {
            switch(direccion)
            {
                case 1: setLocation(getX(),getY()+5);
                        break;

                case 2: setLocation(getX()-5,getY());
                        break;

                case 3: setLocation(getX(),getY()-5);
                        break;

                case 4: setLocation(getX()+5,getY());
                        break;
            }
        }
        
        /**
         * Cambia la Direccion dependiendo hacia donde se haya girado
         */
        public void cambiaDireccion(int Rotacion)
        {
            if (Rotacion==270 || Rotacion==-90)
                direccion=1;
            
            if(Rotacion==0)
                direccion=2;
                
            if(Rotacion==90 || Rotacion==-270)
                direccion=3;
            
            if(Rotacion==180 || Rotacion==-180)
                direccion=4;
        }    
}
